package dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Order;

public interface GenericDAO<T> {

	void refresh(T object);

	void flush();

	void clear();

	T merge(T objeto);

	void salvar(T objeto);

	void remover(T objeto);

	void removerPorChave(Serializable chave);

	T buscarPorChave(Serializable chave);

	List<T> listarPorExemplo(T objeto, Order... ordenacoes);

	List<T> listarPorExemplo(T objeto, Integer indiceInicial,
			Integer indiceFinal, Order... ordenacoes);

	int buscarQuantidadeTotal();

	List<T> listarTodos(Order... ordenacoes);

	List<T> listarTodos(Integer indiceInicial, Integer indiceFinal,
			Order... ordenacoes);

	String adicionarOrderByHql(Order... ordenacoes);

	Criteria criarCriteria();

	Example criarExemplo(T objeto);

	int buscarQuantidadeTotalAtivos();

	List<T> listarAtivos();

	List<T> listarInativos();
}
